package com.eatrip.presentation;

import java.io.IOException;
import java.util.Iterator;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import com.eatrip.bean.DatiLocale;
import com.eatrip.bean.FotoLocale;

public class LocaleView extends TagSupport {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 2119199547509216340L;
	
	private DatiLocale locale;
	private boolean isFoto = true;
	// questo paramero andrebbe settato nel db e recuperato.
	private int numFotoVisualizzabili=3;
	private int dimensioneFoto = 120;
	private boolean isDettagli = true;
	private int dimensioneDettagli = 40;
	private boolean isDati = true;
	private boolean isMiniDettagli = false;
	private String path = "/WEB-INF/view/home";
	private String basePathImage = "../../../../";
	private boolean onlyFoto = false;
	
	
	public int doStartTag() throws JspException {
		try {
            JspWriter out = super.pageContext.getOut();
            out = this.setDivLocaleOpen(out);
            //informazioni mini sul locale ( no foto, ne dettagli )
            if (isMiniDettagli){
            	if (!path.equalsIgnoreCase("null"))
            		out.print("<a class=\"link\" href=\""+ path +"\" >\n");
            	out= this.setMiniDettaggli(out);
            }
            else if (onlyFoto){
            	if (!path.equalsIgnoreCase("null"))
            		out.print("<a class=\"link\" href=\""+ path +"\" >\n");
            	out= this.setFotoLocale(out);
            }
            else{
            	//informazioni complete sul locale
	            if (!path.equalsIgnoreCase("null"))
	            	out.print("<a class=\"link\" href=\""+ path +"\" >\n");
	            if (isFoto)
	            	out = this.setFotoLocale(out);
	            out = this.setNomeLocale(out);
	            if (isDati)
	            	out = this.setDatiImp(out);
	            if (isDettagli)
	            	out = this.setDettagliLocale(out);
            }
        } catch(IOException ioe) {
            throw new JspException("Error: " + ioe.getMessage());
        }       
        return SKIP_BODY;
	}
	
	
	public int doEndTag() throws JspException {
		try {
			JspWriter out = super.pageContext.getOut();
			if (!path.equalsIgnoreCase("null"))
				out.print("</a>\n");
			out = this.setDivLocaleClosed(out); 
		} catch (Exception e) {
			throw new JspException(e.toString());
		}
		return EVAL_PAGE;
	}
	

	public DatiLocale getLocale() {
		return locale;
	}

	public void setLocale(DatiLocale locale) {
		this.locale = locale;
	}
	
	public boolean isFoto() {
		return isFoto;
	}

	public void setFoto(boolean isFoto) {
		this.isFoto = isFoto;
	}
	
	public boolean isDettagli() {
		return isDettagli;
	}

	public void setDettagli(boolean isDettagli) {
		this.isDettagli = isDettagli;
	}
	
	public boolean isDati() {
		return isDati;
	}


	public void setDati(boolean isDati) {
		this.isDati = isDati;
	}


	public int getDimensioneDettagli() {
		return dimensioneDettagli;
	}

	public void setDimensioneDettagli(int dimensioneDettagli) {
		this.dimensioneDettagli = dimensioneDettagli;
	}
	
	public int getDimensioneFoto() {
		return dimensioneFoto;
	}

	public void setDimensioneFoto(int dimensioneFoto) {
		this.dimensioneFoto = dimensioneFoto;
	}
	
	public boolean isMiniDettagli() {
		return isMiniDettagli;
	}

	public void setMiniDettagli(boolean isMiniDettagli) {
		this.isMiniDettagli = isMiniDettagli;
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}
	
	public String getBasePathImage() {
		return basePathImage;
	}


	public void setBasePathImage(String basePathImage) {
		this.basePathImage = basePathImage;
	}
	
	
	public boolean isOnlyFoto() {
		return onlyFoto;
	}


	public void setOnlyFoto(boolean onlyFoto) {
		this.onlyFoto = onlyFoto;
	}


	public JspWriter setDivLocaleOpen(JspWriter out) throws IOException{
		out.print("<div class=\"locale\">\n");
        return out;
	}
	
	public JspWriter setDivLocaleClosed(JspWriter out) throws IOException{
		out.print("</div>\n");
        return out;
	}
	
	public JspWriter setFotoLocale(JspWriter out) throws IOException{
		//controllo se ci sono foto locale
		if (!locale.getFotoLocale().isEmpty()){
			out.print("<div class=\"images\">\n");
			Iterator<FotoLocale> iter = locale.getFotoLocale().iterator();
			int i = 0; 
			while(iter.hasNext() && i<= numFotoVisualizzabili){
				FotoLocale fotoLocale = iter.next();
				out.print("<img alt=\""+ fotoLocale.getNome() +"\" src=\""+ this.basePathImage +"images/"+ fotoLocale.getPathFoto() +"\" width=\""+ dimensioneFoto +"\"  height=\""+ dimensioneFoto +"\" />\n");
				i++;
			}
			out.print("</div>\n");
		}
		
		return out;
	}
	
	public JspWriter setNomeLocale(JspWriter out) throws IOException{
		out.print("<div class=\"nome-locale\">\n");
		out.print("<label class=\"nome-locale-label\">"+locale.getNomeLocale()+"</label>\n");
		out.print("</div>\n");
		return out;
	}
	
	
	public JspWriter setDatiImp(JspWriter out) throws IOException{
		out.print("<table>\n");
			out.print("<tr>\n");
				out.print("<th>\n");
					out.print("<span class=\"desc-indirizzo\">Indirizzo : </span>\n");
					out.print("<label class=\"indirizzo\">"+ locale.getIndirizzo() +"</label>\n");
				out.print("</th>\n");
				
				out.print("<th>\n");
					out.print("<span class=\"desc-telefono\">Telefono : </span>\n");
					out.print("<label class=\"telefono\">"+ locale.getTelefono() +"</label>\n");
				out.print("</th>\n");
				
				out.print("<th>\n");
					out.print("<span class=\"desc-sito-web\">Sito Web : </span>\n");
					out.print("<label class=\"sito-web\">"+ locale.getSitoWeb() +"</label>\n");
				out.print("</th>\n");
			
			out.print("</tr>\n");
			
			out.print("<tr>\n");
				out.print("<th>\n");
					out.print("<span class=\"desc-tipo-locale\">Tipo locale : </span>\n");
					out.print("<label class=\"tipo-locale\">"+ locale.getTipoLocale().getDescrizione() +"</label>\n");
				out.print("</th>\n");
				
				out.print("<th>\n");
					out.print("<span class=\"desc-fascia-prezzo\">Fascia Prezzo : </span>\n");
					if (locale.getFasciaPrezzo() != null)
						out.print("<label class=\"fascia-prezzo\">"+ locale.getFasciaPrezzo().getDescrizione() +"</label>\n");
				out.print("</th>\n");
				
				out.print("<th>\n");
					out.print("<span class=\"desc-chiusura-settimanale\">Chiusura Settimanale : </span>\n");
					if (locale.getChiusuraSettimanale() != null)
						out.print("<label class=\"chiusura-settimanale\">"+ locale.getChiusuraSettimanale().getDescrizione() +"</label>\n");
				out.print("</th>\n");
			out.print("</tr>\n");
		out.print("</table>\n");
		
		return out;
	}
	
	
	public JspWriter setDettagliLocale(JspWriter out) throws IOException{
		out.print("<div class=\"dettagli\">\n");
			out.print("<table>\n");
			
			out.print("<tr>\n");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getAllAperto(), "all'aperto");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getAnimali(), "Animali");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getCeliaci(), "Celiaci");
			out.print("</tr>\n");
			
			out.print("<tr>\n");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getCucinaTipica(), "Cucina Tipica");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getDaAsporto(), "Da Asporto");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getMusicaDalVivo(), "Musica Dal Vivo");
			out.print("</tr>\n");
			
			out.print("<tr>\n");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getParcheggio(), "Parcheggio");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getRicevimenti(), "Ricevimenti");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getSalaFumatori(), "Sala Fumatori");
			out.print("</tr>\n");

			out.print("<tr>\n");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getSkyMediaset(), "Sky / Mediaset");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getVistaMare(), "Vista Mare");
			out = this.setTableDettagli(out, locale.getDettagliLocale().getWifi(), "Wifi");
			out.print("</tr>\n");

			out.print("</table>\n");
		out.print("</div>\n");
		return out;
	}
	
	private JspWriter setTableDettagli(JspWriter out ,boolean check ,String nome) throws IOException{
		out.print("<th>");
			out.print("<label>"+ nome +"</label>");
		out.print("</th>\n");
		out.print("<th>\n");
		if (check){
			out.print("<img src=\""+ this.basePathImage +"images/v.png\" width=\""+dimensioneDettagli+"\" height=\""+dimensioneDettagli+"\"\n");
		}
		else
			out.print("<img src=\""+ this.basePathImage +"images/x.png\" width=\""+dimensioneDettagli+"\" height=\""+dimensioneDettagli+"\"\n");
		out.print("</th>\n");
		return out;
	}
	
	
	public JspWriter setMiniDettaggli(JspWriter out) throws IOException{
		this.setFalse();
		out.print("<div class=\"nome-locale\">\n" +
					"<label class=\"desc-nome-locale\">Nome : </label>\n" +
					"<label class=\"nome-label\">"+ locale.getNomeLocale() +"</label>\n" +
				  "</div>\n");
		
		out.print("<div class=\"indirizzo\">\n" +
					"<label class=\"desc-nome-locale\">Indirizzo : </label>\n" +
					"<label class=\"indirizzo-label\">"+ locale.getIndirizzo() +"</label>\n" +
				  "</div>\n");
	
		out.print("<div class=\"sito-web\">\n" +
					"<label class=\"desc-sito-web\">Sito Web : </label>\n" +
					"<label class=\"sito-label\">"+ locale.getSitoWeb() +"</label>\n" +
				  "</div>\n");
		
		out.print("<div id=\"telefono\">\n" +
					"<label class=\"desc-telefono\">Telefono : </label>\n" +
					"<label class=\"telefono-label\">"+ locale.getTelefono() +"</label>\n" +
				  "</div>\n");
		
		out.print("<div id=\"chiusura-settimanale\">\n" +
					"<label class=\"desc-chiusura-settimanale\">Giorno Chiusura : </label>\n" +
					"<label class=\"chiusura-label\">"+ locale.getChiusuraSettimanale().getDescrizione() +"</label>\n" +
				  "</div>\n");
		
		out.print("<div id=\"fascia-prezzo\">\n" +
					"<label class=\"desc-fascia-prezzo\">Prezzi Minimi : </label>\n" +
					"<label class=\"fascia-label\">"+ locale.getFasciaPrezzo().getDescrizione() +"</label>\n" +
				  "</div>\n");
		out.print("<br />\n");
		
		return out;
	}
	
	public void setFalse(){
		this.isDati = false;
		this.isDettagli = false;
		this.isFoto = false;
	}
	
	
	
	
}
